package main

import (
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"log"
	"time"
)

var conn *gorm.DB

type Soul struct {
	Id    uint
	Title string
	Hits  int32
}

func (Soul) TableName() string {
	return "soul"
}

func main() {
	initDB()
	r := gin.Default()
	r.Static("/assets", "./assets") // 资源
	r.LoadHTMLGlob("views/*")       // 页面
	// 查询
	r.GET("/", func(c *gin.Context) {
		c.HTML(200, "index.html", gin.H{
			"now":  time.Since(time.Now()),
			"body": soul(),
		})
	})
	r.Run() // listen and serve on 0.0.0.0:8080
}

func initDB() {
	dsn := "root:root@tcp(127.0.0.1:3306)/juxiaoba?charset=utf8&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatal("数据库连接失败")
	}
	sqlDB, _ := db.DB()
	// SetMaxIdleConns 设置空闲连接池中连接的最大数量
	sqlDB.SetMaxIdleConns(10)
	// SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetMaxOpenConns(100)
	// SetConnMaxLifetime 设置了连接可复用的最大时间。
	sqlDB.SetConnMaxLifetime(time.Hour)
	conn = db
}

func soul() (soul Soul) {
	conn.Order("rand()").First(&soul)
	num := soul.Hits + 1
	conn.Model(soul).Update("hits", num)
	return soul
}